iT邦幫忙

0

PostMan Script - 寫Api整合測試

  • 分享至 

  • xImage
  •  

因為需要幫公司新人Webapi訓練來新增整合測試,來減少人工測試的時間,所以研究了一下PostMan Script的使用方法。

邏輯上也是可以使用程式來寫整合測試,但在使用PostMan上我覺得操作起來更簡潔方便一些。

什麼是PostMan Script?

Postman Script 是指在 Postman 工具中可以使用JavaScript的程式碼,在 Pre-request Script 或 Tests 中寫腳本,來執行更複雜的測試或工作流程。

舉例: 我有一個Request A,我希望在呼叫A之前(Pre-request Script)先設定一些基本參數或步驟,然後執行A之後,拿A得到的結果進行驗證(Test),來判斷是否得到預期的結果。

在正式使用之前,先來了解,幾個在使用 PostMan Script 要了解的基本概念:
https://ithelp.ithome.com.tw/upload/images/20230920/20157184cqrFyzzVDn.png

1.Collection
用途:是一組相關的 API 請求的集合。
功能: Collection 層級上,你可以定義變數、Pre-request Script、和 Tests。
該 Collection 的任何請求被執行時,這些設定都會被應用。
執行 :使用 Postman Runner,你可以執行整個 Collection 的請求。

2.Folder
用途:Collection 內部進一步組織Request,可以依照特定功能、工作流程或其他邏輯作劃分。
功能:跟 Collection 類似,你也可以在 Folder 層級上定義變數、Pre-request Script、和 Tests。該Folder的Request被執行時,這些設定都會被應用。

3.Request:
用途:定義 API 請求,以及驗證 API 響應和其行為
功能:每個 Request 可以有其自己的變數、Pre-request Script、和 Tests。
這些只在該請求被執行時應用

4.Environment:
用途:建立環境變數,可以在多個Request或腳本當中做使用

5.Pre-request Script:
用途:在實際請求被發送之前,會先執行此處腳本的內容。通常用於設定變數、生成Header、或執行其他任何需要在請求之前完成的任務。

6.Tests:
用途:在實際請求發送之前後,會執行此處腳本的內容。主要是用來檢查,Response的結果是否符合預期。

7.Runner:
用途: 可以自動連續執行整個Collection的請求,在執行之前可以導入文件(EX:測試項目),以及不同的環境配置(EX:請求之間的延遲),並且在執行後會得到所有請求的執行結果。

執行腳本的順序:會依照層級架構,Collection => Folder =>Request

實際應用案例:
我現在做了一個小算盤的功能,Client端會先發一個createCalculator的Post,去拿到一台小算盤的Id,
然後再透過這個ID跟指令,去操作小算盤,舉例:
https://ithelp.ithome.com.tw/upload/images/20230920/20157184Y6v8TqyGDM.png

範例(連續):

1.透過 createcalculator,取得Response id = 1。

2.透過 pressbutton,傳入 id = 1,buttonKey = ButtonFive, 取得Response:

"upperMessage": "",
"downMessage": "5",
"inOrderTraversal": "",
"postOrderTraversal": "",
"preOrderTraversal": ""

3.透過pressbutton,傳入 id=1,buttonKey = ButtonPlus, 取得Response:

"upperMessage": "5+",
"downMessage": "5",
"inOrderTraversal": "",
"postOrderTraversal": "",
"preOrderTraversal": ""

4.透過pressbutton,傳入 Id=1,buttonKey = ButtonThree, 取得Response:

"upperMessage": "5+",
"downMessage": "3",
"inOrderTraversal": "",
"postOrderTraversal": "",
"preOrderTraversal": ""

5.透過pressbutton,傳入 Id=1,buttonKey = ButtonEqual, 取得Response:

"upperMessage": "5+3=",
"downMessage": "8",
"inOrderTraversal": "5+3",
"postOrderTraversal": "53+",
"preOrderTraversal": "+53"

上述是我希望得到的效果,為此,我寫了一個驗證我API的Json檔案(可以從Runner導入文件)

{
    "name": "1.加法",
    "input": "5+3=", //我預期輸入的全部指令,在實際執行Request時,
                       一個字元代表每做一個Post,buttonKey的參數
                       EX: 2+3=  =>   ButtonTwo,ButtonPlus,ButtonThree,ButtonEqual 
    
    "upperMessage": "5+3=", //我預期的所有回傳結果
    "downMessage": "8",
    "inOrderTraversal": "5+3",
    "postOrderTraversal": "53+",
    "preOrderTraversal": "+53"
  }

現在我希望可以透過PostMan Script 去測試得到我要的結果:
我的腳本要做的事情大概如下:

1.透過createcalculator,取得id。
2.轉換input:把輸入字串,切成一格一格的字元,去字典找字元對應的buttonKey。
3.有多少buttonKey,就拿id跟buttonKey去呼叫pressbutton多少次。
4.拿最後一次Request pressbutton 的結果去跟我預期的所有回傳結果作比對。

我會依照 Collection => Folder =>Request 寫腳本:

1.Environment:先設定我的環境變數,讓整個Collection可以使用

url: 寫好的WebApi,本地Server開起來的Url。
buttonDictionary = input 對應的buttonKey轉換。
EX: 2+3= 轉換成: ButtonTwo,ButtonPlus,ButtonThree,ButtonEqual

https://ithelp.ithome.com.tw/upload/images/20230921/20157184VfOcBR0iQa.png

2.Collection:
因為步驟是從createcalculator取得id開始,這一層可以不寫腳本

3.Request:
createcalculator:
因為步驟是從createcalculator取得id開始,所以不需要在createcalculator寫Pre-request Script,只需要透過Test拿到id,作為一個環境變數。然後把input轉換成一個轉換後的buttonList,存放buttonKey。

https://ithelp.ithome.com.tw/upload/images/20230921/20157184zbWMPTthGK.png
pressButton :

Pre-request Script:

需要知道當前的Request執行到哪個buttonKey,所以我選擇用currentIndex記錄下一次Request應該要從buttonList拿哪一個buttonKey。如果已經全部都執行過了,就會把lastRequest設成True。
https://ithelp.ithome.com.tw/upload/images/20230921/20157184YFsXZOcQbj.png

Tests:
這裡會先用lastRequest判斷是否已經把所有buttonKey執行完了?如果是,就開始比對我原始提供的驗證資料與最後一個Response的結果做比對(使用pm.test),如果不是,就會繼續呼叫pressButton。
https://ithelp.ithome.com.tw/upload/images/20230921/20157184i7IZEjC8GX.png

執行Runner

寫好腳本之後,就可以把驗證資料的檔案上傳,然後就可以執行了!
https://ithelp.ithome.com.tw/upload/images/20230921/20157184hKJuhQC3Ei.png

實際執行的效果,透過pm.test的參數文字設計,可以產生出你要的文字格式,成功就是Passed,失敗就是Failed。
https://ithelp.ithome.com.tw/upload/images/20230921/20157184a1IQBCEddw.png

https://ithelp.ithome.com.tw/upload/images/20230921/20157184V65hCpQmdp.png

以上就是基本的使用範例!


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言